package prog2012.practico3;

import java.util.Arrays;

public class THashing {
	public int[] tablaHash;
	public THashing(int tamanioTabla) {
		tablaHash = new int[tamanioTabla];
		Arrays.fill(tablaHash, -1);
	}

	private int funcionHashing (int clave, int tamanioTabla) {
		return clave % tamanioTabla;
	}
	private boolean posicionOcupada(int pos) {
		return tablaHash[pos] != -1;
	}

	public int insertarEnHash(int clave) {
		int tamanioTabla = tablaHash.length;
		int h0 = funcionHashing(clave, tamanioTabla);
		if (posicionOcupada(h0)) {
			for (int j = 1; j < tamanioTabla; j++) {
				int hi = funcionHashing(h0 + j, tamanioTabla);
				if (! posicionOcupada(hi)) {
					tablaHash[hi] = clave;
					return hi;
				}
			}
		} else {
			tablaHash[h0] = clave;
			return h0;
		}
		return -1;
	}

	public int buscarEnHash(int clave) {
		int tamanioTabla = tablaHash.length;
		int h0 = funcionHashing(clave, tamanioTabla);
		if (tablaHash[h0] != clave) {
			for (int j = 1; j < tamanioTabla; j++) {
				int hi = funcionHashing(h0 + j, tamanioTabla);
				if (tablaHash[hi] == clave) {
					return hi;
				}
			}
		} else {
			if (tablaHash[h0] == clave) {
				return h0;
			}
		}
		return -1;
	}
	
	
	public void insertarDesdeArchivo(String nombreCompletoArchivo){
		String[] arrayNumeros = (String[]) new String[ManejadorArchivosGenerico.leerArchivo(nombreCompletoArchivo).length];
		arrayNumeros = ManejadorArchivosGenerico.leerArchivo(nombreCompletoArchivo);
		for (int i = 0; i < arrayNumeros.length; i++){
			this.insertarEnHash(Integer.parseInt(arrayNumeros[i]));
			System.out.println("inserto: " + arrayNumeros[i]);
		}
	}

	
	/**
	public void realizarBusquedasHash(String nombreCompletoArchivo){
		String[] arrayPalabras = (String[]) new String[ManejadorArchivosGenerico.leerArchivo(nombreCompletoArchivo).length];
		arrayPalabras = ManejadorArchivosGenerico.leerArchivo(nombreCompletoArchivo);
		String[] arrayPalabrasEncontradas = (String[]) new String[ManejadorArchivosGenerico.leerArchivo(nombreCompletoArchivo).length];
		
		for (int i = 0; i < arrayPalabras.length; i++) {
			if (this.buscarEnHash(arrayPalabras[i])) {
				arrayPalabrasEncontradas[i] = "Palabra buscada: " + arrayPalabras[i] + ", encontrada: SI";
			}else{
				arrayPalabrasEncontradas[i] = "Palabra buscada: " + arrayPalabras[i] + ", encontrada: NO";
			}		
		}
		ManejadorArchivosGenerico.escribirArchivo(nombreCompletoArchivo, arrayPalabrasEncontradas);
	}

**/
}
